perm filename CKE[CHK,ALS] blob
sn#272323 filedate 1977-03-26 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00024 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 INIT1 CFZ CFOO CF1
C00007 00003 CAQBP PCCNT PCCNT1 PCCNT2
C00012 00004 RFD LFD LBD RBD RFM LFM LBM RBM RFU LFU LBU RBU RFT LFT LBT RBT RFB LFB LBB RBB RFR LFR LBR RBR FP BP FA BA AK PK AN PN
C00015 00005 DIAGZ DIAKZ CROOKZ CRKB CRKZ
C00018 00006 RECAPZ ELINEZ EMB EMW DORANZ ORMK DOR BRIDGZ BDGW BDGX BDGZ BDG1 BDG2 BDG3 BDG4 BDG5 BDG6
C00021 00007 GUARDZ GUARDW GARD2Z CKMOVZ MOVMSK SHOVEZ NODEZ
C00025 00008 PNTMSK LFTFIL RTFIL ROW2 ROW7 FSTROW LSTROW KCENTZ KMASK TRIMZ LH RH DDQUAZ DIAQAD FORAFZ FH BH FRONTZ MOBILZ
C00029 00009 MOBLZ UNDENZ DENYZ THRETZ PANTSZ
C00032 00010 ADAVNZ MIDDLZ MIDMSK DYKEZ FOURZ CRAMPZ CRAMPW
C00036 00011 PAIRZ WOOPZ CORNEZ CORNZ1 CORNZ2 CORNM1 CORNM2 CORNM3
C00039 00012 NEARZ NEARMB NEARMW MOMENZ MOMEZZ MOMZZZ MOMEZ1 MOMEZ2 PRESSZ PRESZZ PRESSM
C00042 00013 ALINEZ AMB AMW NERZ NERZ2 NERZ3 NERZ4 EDGEZ EDGMSK CENTZ
C00045 00014 CROK2Z NER3Z NER3Z2 NER3Z3 NER3Z4 FILEZ FILMSK
C00048 00015 PINPZ PINPW
C00051 00016 SHVEDZ SHVERZ SHVESZ
C00054 00017 PINKZ PINKW PINZ PINW
C00060 00018 QUICKZ QUICKP QUICKW KEYSQZ NONUSZ FILESZ FILESM
C00063 00019 SYN
C00067 00020 PHASEV PHASET CFERR1 CFERR3 CFERR2
C00070 00021 TLIST
C00072 00022 EV EVD EVD2 EEB EEB2 TESTLS
C00075 00023 TESTM TESTSH TESTS
C00077 00024 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY CFTAB2 CFTAB3 CFLAG DENYC THRTC UMB CFMSK CFMSK2 PHASE KSTART MSK2 OFFEDG DDIM CMSK DMSK WGRD1 WGRD2 BGRD1 BGRD2 RMASK SHOVM VULW1 VULW2 VULW3 VULW4 VULB1 VULB2 VULB3 VULB4 MSK1 MSK3 MSK4
C00080 ENDMK
C⊗;
;INIT1 CFZ CFOO CF1
TITLE CKE 5/13/71 16-TERM VERSION
LALL
SUBTTL SPECIAL EVALUATION MACROS -
;REGISTER ASSIGNMENTS
;NAME USAGE
Z←0 ;SCRATCH, AND EVA SCORES
X1←1 ;SCRATCH
U1←2 ;SCRATCH
X2←3 ;SCRATCH
U2←4 ;SCRATCH
X3←5 ;ACTP
U3←6 ;ACTK
X4←7 ;EMPTY
U4←10 ;CFLAG
X5←11 ;COLOR
U5←12 ;PASP
Q←13 ;PASK AND EV VALUES
A←14 ;A
P←15 ;P
K←16 ;K
PDP←17 ;PUSH-DOWN POINTER
INTERN CFTAB2
INTERN INIT1,CFLAG,EV,PHASE,PHASEV,TLIST,EEB,EEB2,PCCNT
INTERN KSTART,RFU,LFU,LBU,RBU
EXTERN OCT2,PRINT,TERPRI,NUMOUT,DDT
EXTERN LFLAG
;*****************************************************************
; INITT WILL BE CALLED DURING INITIALIZATION OF THE PROGRAM.
;IT FILLS TABLES CFTAB2, AND CFTAB3, WHICH ARE NEEDED DURING
;EVALUATION. IT USES, WITHOUT RESTORING, REGISTERS Z,X1,U1,X2,
;AND C4.
;
;BITSON COUNTS 1 BITS IN THE SUBSCRIPT
; E.G. BITSON+12 = 2
;
;CFTAB2 REVERSES THE BITS OF THE SUBSCRIPT
; E.G. CFTAB2+23 = 620000000000
;
;CFTAB3 MULTIPLIES THE FIRST 3 BITS OF A NUMBER BY 2*13 AND DIVIDES
;BY THE LAST 6 BITS.
;*****************************************************************
INIT1: MOVEI U2,41 ;START WITH 1 AND 1 FOR CFTAB3
CFZ: MOVE X1,U2 ;TOP OF LOOP
LSHC X1,-5
JUMPE U1,CFOO ;CHECK FOR ZERO DENOMINATOR
LSH U1,-37 ;GET DENOMINATOR RIGHT JUSTIFIED
ASH X1,7
IDIVM X1,U1
ASH X1,6
MOVEM U1,CFTAB3(U2) ;STORE QUOITIENT INTO TABLE
CFOO: AOJ U2, ;BUMP FOR NEXT ITERATION
CAIE U2,1000 ;CHECK FOR TERMINATION
JRST CFZ ;LOOP BACK
CF1: MOVEI U2,377 ;BEGINNING OF CFTAB2 INITIALIZATION
MOVEI X2,10
MOVE X1,U2
MOVEI U1,
LSHC X1,-1 ;TOP OF LOOP TO REVERSE BITS
ROT U1,2
SOJG X2,.-2
LSH U1,33
MOVEM U1,CFTAB2(U2) ;STORE REVERSED BITS INTO TABLE
SOJGE U2,CF1+1
POPJ PDP,
;CAQBP PCCNT PCCNT1 PCCNT2
;*****************************************************************
; PCCNT CALCULATES PIECE-COUNT AS FOLLOWS: A1+A2-P1-P2/A1+A2+P1+P2
;WHERE
; A1 = 3 * ACTIVE KINGS NOT ON FRONT OR BACK EDGES
; A2 = 2 * ACTIVE NON-KINGS OR KINGS ON FRONT OR BACK EDGES
; P1 = 3 * PASSIVE KINGS NOT ON FRONT OR BACK EDGES
; P2 = 2 * PASSIVE NON-KINGS OR KINGS ON FRONT OR BACK EDGES
;
;REGISTERS Z,X1,U1,U2,U3,U4,U5,Q,A,P, AND K ARE USED.
;
;UPON EXIT, U3 HAS THE PIECE-COUNT VALUE.
;ON ENTRY IT ASSUMES THAT A,P, AND K ARE PROPERLY FILLED
;*****************************************************************
;*****************************************************************
; CAQ SIMULATES THE 7090 CAQ INSTRUCTION.
;IT COUNTS THE 1 BITS IN REGISTER U1+1 (U1 IS AN ARGUMENT), AND
;LEAVES THE RESULT IN REGISTER PDP (AN ARGUMENT).
;THE GUARD BITS ARE ALSO SET TO ZERO IN THIS MACRO (IF THEY ARE
;TO BE USED FOR NECESSARY INFORMATION LATER, THEY MUST BE SAVED)
;*****************************************************************
DEFINE CAQ (U1,SUM) <;THIS MACRO COUNTS BITS IN U1+1
AND U1+1,GUARDS
MOVE SUM,[POINT 9,U1+1]
MOVEM SUM,CAQBP
ILDB U1,CAQBP
MOVE SUM,BITSON(U1)
ILDB U1,CAQBP
ADD SUM,BITSON(U1)
ILDB U1,CAQBP
ADD SUM,BITSON(U1)
ILDB U1,CAQBP
ADD SUM,BITSON(U1)>
CAQBP: Z
GUARDS: 377377377377
EXTERN BITSON, PLY
;***************************************************************
; CFSPEC CALCULATES UMB, THRTC, AND DENYC, WHICH ARE USED IN
;THE EVALUATION TERMS CPRTDL, THRET, AND DENFNT RESPECTIVELY.
;UPON ENTRY IT EXPECTS:
; Z = EMPTY SQUARES
; U1 = FORWARD ACTIVE PIECES
; U2 = BACKWARD ACTIVE PIECES
; U3 = RIGHT FORWARD POTENTIAL MOVES
; U4 = LEFT FORWARD POTENTIAL MOVES
; X5 = COLOR OF BOARD
; U5 = LEFT BACKWARD POTENTIAL MOVES
; Q = RIGHT BACKWARD POTENTIAL MOVES
; A = ACTIVE PIECES (ALL)
; P = PASSIVE PIECES (ALL)
; K = KINGS
; THESE CONDITIONS ARE NORMALLY MET AT EXIT FROM LEGAL.
;ALL REGISTERS ARE USED, AND Z,X5,A,P, AND K ARE SAVED.
;***************************************************************
PCCNT: MOVE U1,P
CAQ X1,U5
LSH U5,1 ;2P
MOVN U3,U5
MOVE U4,U5
SKIPN U1,K
JRST PCCNT2
AND U1,P
AND U1,OFFEDG
JUMPE U1,PCCNT1
CAQ X1,U4
ADDB U5,U4 ;2P+PK
PCCNT1: MOVNS U5 ;CHANCE SIGN
MOVE U1,A
AND U1,K
AND U1,OFFEDG
MOVE U3,U5
JUMPE U1,PCCNT2
CAQ X1,U3
ADD U3,U5 ;AK-(2P+PK)
PCCNT2: MOVE U1,A
CAQ X1,U5
LSH U5,1
ADD U5,U3 ;2A+AK-2P-PK
LSH U4,1 ;4P+2PK
ADD U4,U5 ;2A+AK+2P+PK
LSH U4,-1 ;DIVIDE BY 2
LSH U5,5 ;MAKE ROOM
MOVM U2,U5
CAIGE U2,1000
JRST .+3
SUBI U2,41
JRST .-3
IOR U2,U4
MOVE U3,CFTAB3(U2)
SKIPGE U5
MOVNS U3
ASH U3,10
POPJ PDP,
;RFD LFD LBD RBD RFM LFM LBM RBM RFU LFU LBU RBU RFT LFT LBT RBT RFB LFB LBB RBB RFR LFR LBR RBR FP BP FA BA AK PK AN PN
SUBTTL MACROS FOR TERM EVALUATIONS
PAGE
DEFINE EMAC (M1,M2,M3,M4) <
MOVE X3,Z
LSH X3,M1 ;-4,-5,4,5
XOR X3,M2 ;U1,U1,U2,U2
AND X3,M2
LSH X3,M3 ;-10,-12,10,12
MOVEM X3,M4 ;RFB,LFB,LBB,RBB>
DEFINE EVMAC (E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,M4,M5,M6) <
SKIPN X4,E1 ;RF,LF,LB,RB
JRST .+33
LSH X4,E6 ;-4,-5,4,5
MOVEM X4,E7
MOVE X3,E2 ;BP,BP,FP,FP
LSH X3,E3 ;4,5,-4,-5
MOVE PDP,X3
AND PDP,M4 ;RFB,LFB,LBB,RBB
MOVEM PDP,M5 ;RFR,LFR,LBR,RBR
MOVE PDP,E2
LSH PDP,E4 ;12,10,-12,-10
AND PDP,Z
LSH PDP,E5 ;-5,-4,5,4
IOR X3,PDP
AND PDP,M6 ;LFB,RFB,RBB,LBB
IORM PDP,M5
AND X4,X3
MOVEM X4,E8 ;RFD,LFD,LBD,RBD
ANDM X4,M5
XOR X4,E7
MOVEM X4,E9 ;RFU,LFU,LBU,RBU
MOVE X3,Z
LSH X3,E10 ;5,4,-5,-4
AND X3,P
LSH X3,E10
AND X3,E9
MOVEM X3,E11 ;RFT,LFT,LBT,RBT
JRST .+6
SETZM E7 ;RFM,LFM,LBM,RBM
SETZM M5 ;RFR,LFR,LBR,RBR
SETZM E8 ;RFD,LFD,LBD,RBD
SETZM E9 ;RFU,LFU,LBU,RBU
SETZM E11 ;RFT,LFT,LBT,RBT>
RFD: Z ;DENY DATA
LFD: Z
LBD: Z
RBD: Z
RFM: Z ;MOBILITY DATA
LFM: Z
LBM: Z
RBM: Z
RFU: Z ;UNDENIED MOBILITY DATA
LFU: Z
LBU: Z
RBU: Z
RFT: Z ;THREAT DATA
LFT: Z
LBT: Z
RBT: Z
RFB: Z ;RF BACK UP
LFB: Z
LBB: Z
RBB: Z
RFR: Z ;RF RECAPTURE
LFR: Z
LBR: Z
RBR: Z
FP: Z ;FORWARD PASSIVE
BP: Z ;BACKWARD PASSIVE
FA: Z ;FORWARD ACTIVE
BA: Z ;BACKWARD ACTIVE
AK: Z ;ACTIVE KINGS
PK: Z ;PASSIVE KINGS
AN: Z ;ACTIVE NON-KINGS
PN: Z ;PASSIVE NON-KINGS
;DIAGZ DIAKZ CROOKZ CRKB CRKZ
DEFINE DIAG (USE) <;DIAGONAL TERM ONLY
IFN USE,<MOVEI U1,[ASCIZ /DIAG /]>
IFE USE,<JRST DIAGZ>>
DIAGZ: MOVE U1,P ;DIAGONAL ROUTINE
AND U1,DDIM
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE DIAK (USE) <;DIAGONAL KING TERM
IFN USE,<MOVEI U1,[ASCIZ /DIAGK /]>
IFE USE,<JRST DIAKZ>>
DIAKZ: MOVE U1,PK
AND U1,DDIM
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE CROOK (USE) <;CROOK TERM
IFN USE,<MOVEI U1,[ASCIZ /CROOK /]>
IFE USE,<JRST CROOKZ>>
CROOKZ: JUMPE X5,CRKB
MOVE U1,Z
LSH U1,-4
AND U1,P
LSH U1,-4
MOVE U2,Z
LSH U2,-5
AND U2,P
LSH U2,-5
IOR U2,U1
AND U2,P
JUMPE U2,CRKZ+3
MOVE U1,Z
LSH U1,1
AND U1,P
LSH U1,4
MOVE X4,P
LSH X4,1
AND X4,Z
LSH X4,4
IOR X4,U1
AND X4,U2
JUMPE X4,CRKZ+3
JRST CRKZ
CRKB: MOVE U1,Z
LSH U1,4
AND U1,P
LSH U1,4
MOVE U2,Z
LSH U2,5
AND U2,P
LSH U2,5
IOR U2,U1
AND U2,P
JUMPE U2,CRKZ+3
MOVE U1,Z
LSH U1,-1
AND U1,P
LSH U1,-4
MOVE X4,P
LSH X4,-1
AND X4,Z
LSH X4,-4
IOR X4,U1
AND X4,U2
JUMPE X4,CRKZ+3
CRKZ: MOVEI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
;RECAPZ ELINEZ EMB EMW DORANZ ORMK DOR BRIDGZ BDGW BDGX BDGZ BDG1 BDG2 BDG3 BDG4 BDG5 BDG6
DEFINE RECAPT (USE) <;RECAPTURE TERM
IFN USE,<MOVEI U1,[ASCIZ /RECAPT /]>
IFE USE,<JRST RECAPZ>>
RECAPZ: MOVE U1,RFR
IOR U1,LFR
IOR U1,LBR
IOR U1,RBR
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE ELINE (USE) <;ELINE TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /ELINE /]>
IFE USE,<JRST ELINEZ>>
ELINEZ: MOVE U1,PN
JUMPE X5,.+3
AND U1,EMB
JRST .+2
AND U1,EMW
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
EMB: 142104210000
EMW: 000021042106
DEFINE DORIO (USE) <;DORIO PLUS ANGLE TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /DORIO /]>
IFE USE,<JRST DORANZ>>
DORANZ: MOVE U1,P ;DORIO ROUTINE
AND U1,DOR
SETCM U2,P ;ANGLE ROUTINE
AND U2,ORMK
IOR U2,U1
JUMPE U2,.+16
CAQ X2,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
ORMK: 021020010210
DOR: 246100002145
DEFINE BRIDGE (USE) <;BRIDGE TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /BRIDGE /]>
IFE USE,<JRST BRIDGZ>>
BRIDGZ: JUMPE X5,BDGW
MOVE U1,PN ;PASSIVE NON-KINGS
AND U1,BDG1
XOR U1,BDG1
JUMPE U1,BDGX
MOVE U1,PN
AND U1,BDG2
XOR U1,BDG2
JUMPN U1,BDGZ+3
MOVE U1,PN
AND U1,BDG5
JUMPE BDGZ+3
JRST BDGZ
JRST BDGZ+3
BDGW: MOVE U1,PN
AND U1,BDG3
XOR U1,BDG3
JUMPN U1,.+3
BDGX: MOVEI X4,2
JRST BDGZ+1
MOVE U1,PN
AND U1,BDG4
XOR U1,BDG4
JUMPE U1,BDGZ+3
MOVE U1,PN
AND U1,BDG6
JUMPE BDGZ+3
BDGZ: MOVEI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
BDG1: 240000000000
BDG2: 110000000000
BDG3: 000000000005
BDG4: 000000000022
BDG5: 060000000000
BDG6: 000000000014
;GUARDZ GUARDW GARD2Z CKMOVZ MOVMSK SHOVEZ NODEZ
DEFINE GUARD (USE) <;GUARD TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /GUARD /]>
IFE USE,<JRST GUARDZ>>
GUARDZ: MOVE X1,PN
MOVEI X4,0
TDNN X1,[340000000007] ;1,2,3 OR 30,31,32
POPJ PDP, ;MUST BE 4 OR 29 ONLY OR EMPTY
MOVEI X4,1
TDNN X1,[140000000006] ;2,3 OR 30,31
POPJ PDP, ;MUST BE 1 OR 32 ONLY
TDNN X1,[300000000003] ;1,2 OR 31,32
POPJ PDP, ;MUST BE 3 OR 30 ONLY
TDNN X1,[240000000005] ;1,3 OR30,32
POPJ PDP, ;MUST BE 2 OR 31 ONLY
SETCM U1,X1
MOVEI X4,4
JUMPE X5,GUARDW
TDNN U1,[340000000000] ;1,2,3
POPJ PDP, ;FULL GUARD
MOVEI X4,3
TDNN U1,[240000000000] ;1 AND 3
POPJ PDP, ;BRIDGE POSITION
MOVEI X4,2
POPJ PDP, ;1,2 OR 2,3
GUARDW: TDNN U1,[000000000007] ;30,31,32
POPJ PDP, ;FULL GUARD
MOVEI X4,3
TDNN U1,[000000000005] ;30 AND 32
POPJ PDP, ;BRIDGE POSITION
MOVEI X4,2
POPJ PDP, ;30,30 OR 31,32
DEFINE GARD2 (USE) <;GARD2 TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /GARD2 /]>
IFE USE,<JRST GARD2Z>>
GARD2Z: MOVE X1,PN
MOVEI X4,0
TDNN X1,[340000000007] ;1,2,3 OR 30,31,32
POPJ PDP, ;MUST BE 4 OR 29 ONLY OR EMPTY
MOVEI X4,1
TDNN X1,[304000000043]
POPJ PDP, ;3 BUT NOT 1 2 OR 6 EQUIVALENT
TDNN X1,[143000000306]
POPJ PDP, ;1 BUT NOT 2 3 7 0R 8 0R EQUIV.
TDNN X1,[261000000215]
POPJ PDP, ;2 BUT NOT 1 3 4 OR 8 OR EQUIV.
MOVEI X4,2
POPJ PDP,
DEFINE CKMOVE (USE) <;MOVE TERM
IFN USE,<MOVEI U1,[ASCIZ /CKMOVE /]>
IFE USE,<JRST CKMOVZ>>
CKMOVZ: MOVE U1,Z
AND U1,MOVMSK
CAQ X1,X4
ANDI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
MOVMSK: 360360360360
DEFINE SHOVE (USE) <;SHOVE TERM
IFN USE,<MOVEI U1,[ASCIZ /SHOVE /]>
IFE USE,<JRST SHOVEZ>>
SHOVEZ: MOVE U1,FP
LSH U1,-11
MOVE U2,BP
LSH U2,11
IOR U1,U2
SKIPN U2,PK
JRST .+6
AND U2,[006146146140]
LSH U2,-1
IOR U1,U2
LSH U2,2
IOR U1,U2
AND U1,A
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE NODE (USE) <;NODE TERM
IFN USE,<MOVEI U1,[ASCIZ /NODE /]>
IFE USE,<JRST NODEZ>>
NODEZ: MOVE X4,Z
LSH X4,1
AND X4,Z
JUMPN X5,.+3
LSH X4,-5
JRST .+2
LSH X4,4
AND X4,PN
JUMPE X4,.+4
MOVEI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
;PNTMSK LFTFIL RTFIL ROW2 ROW7 FSTROW LSTROW KCENTZ KMASK TRIMZ LH RH DDQUAZ DIAQAD FORAFZ FH BH FRONTZ MOBILZ
PNTMSK: 143143143143
LFTFIL: 020020020020
RTFIL: 010010010010
ROW2: 200200200200
ROW7: 001001001001
FSTROW: 360000000000
LSTROW: 000000000017
DEFINE KCENT (USE) <;KING CENTER TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /KCENT /]>
IFE USE,<JRST KCENTZ>>
KCENTZ: MOVE X4,PK ;GET PASK
AND X4,KMASK ;CENTRAL KINGS ONLY
JUMPE X4,.+4
MOVEI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
KMASK: 000146146000
DEFINE TRIM (USE) <;SIDE TO SIDE BALANCE
IFN USE,<MOVEI U1,[ASCIZ /TRIM /]>
IFE USE,<JRST TRIMZ>>
TRIMZ: MOVE U1,P
AND U1,RH
CAQ X1,X4
MOVE U1,P
AND U1,LH
CAQ X1,X3
SUB X4,X3
MOVMS X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
LH: 063063063063
RH: 314314314314
DEFINE DDQUAD (USE) <;DOUBLE DIAG QUADRANTS
IFN USE,<MOVEI U1,[ASCIZ /DDQUAD /]>
IFE USE,<JRST DDQUAZ>>
DDQUAZ: MOVE U1,P
AND U1,DIAQAD
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DIAQAD: 313314063063
DEFINE FORAFT (USE) <;FRONT TO BACK BALANCE
IFN USE,<MOVEI U1,[ASCIZ /FORAFT /]>
IFE USE,<JRST FORAFZ>>
FORAFZ: MOVE U1,P
AND U1,FH
CAQ X1,X4
MOVE U1,P
AND U1,BH
CAQ X1,X3
SUB X4,X3
MOVMS X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
FH: 000000377372
BH: 167377000000
DEFINE FRONT (USE) <;FRONT TERM
IFN USE,<MOVEI U1,[ASCIZ /FRONT /]>
IFE USE,<JRST FRONTZ>>
FRONTZ: MOVE U1,PN
JUMPE X5,.+3
AND U1,DMSK
JRST .+2
AND U1,CMSK
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE MOBIL (USE) <;MOBILITY TERM
IFN USE,<MOVEI U1,[ASCIZ /MOBIL /]>
IFE USE,<JRST MOBILZ>>
MOBILZ: MOVE U1,RFM
IOR U1,LFM
IOR U1,RBM
IOR U1,LBM
CAQ X1,X4
MOVNS X4
ADDI X4,17
CAIGE X4,0
SETZ X4,
POPJ PDP,
;MOBLZ UNDENZ DENYZ THRETZ PANTSZ
DEFINE MOBIL2 (USE) <;MOBILITY 2 TERM
IFN USE,<MOVEI U1,[ASCIZ /MOBIL2 /]>
IFE USE,<JRST MOBLZ>>
MOBLZ: MOVE U1,RFM
CAQ X1,X4
MOVE U1,LFM
CAQ X1,X3
ADD X4,X3
MOVE U1,LBM
CAQ X1,X3
ADD X4,X3
MOVE U1,RBM
CAQ X1,X3
ADD X4,X3
CAILE X4,17
MOVEI X4,17
POPJ PDP,
DEFINE UNDENY (USE) <;UNDENIED MOBILITY TERM
IFN USE,<MOVEI U1,[ASCIZ /UNDENY /]>
IFE USE,<JRST UNDENZ>>
UNDENZ: MOVE U1,RFU
IOR U1,LFU
IOR U1,LBU
IOR U1,RBU
JUMPE U1,.+16 ;TO JUMP CAQ+2
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE DENY (USE) <;DENY TERM
IFN USE,<MOVEI U1,[ASCIZ /DENY /]>
IFE USE,<JRST DENYZ>>
DENYZ: MOVE U1,RFD
IOR U1,LFD
IOR U1,LBD
IOR U1,RBD
JUMPE U1,.+16 ;TO JUMP CAQ+2
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE THREAT (USE) <;THREAT TERM
IFN USE,<MOVEI U1,[ASCIZ /THREAT /]>
IFE USE,<JRST THRETZ>>
THRETZ: MOVE U1,RFT
IOR U1,LFT
IOR U1,LBT
IOR U1,RBT
JUMPE U1,.+16 ;TO JUMP CAQ+2
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE PANTS (USE) <;PANTS TERM
IFN USE,<MOVEI U1,[ASCIZ /PANTS /]>
IFE USE,<JRST PANTSZ>>
PANTSZ: MOVE X4,AN
AND X4,PNTMSK
LSH X4,1
AND X4,AN
JUMPE X5,.+3
LSH X4,-5
JRST .+2
LSH X4,4
AND X4,PK
JUMPE X4,.+4
MOVEI X4,1
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
;ADAVNZ MIDDLZ MIDMSK DYKEZ FOURZ CRAMPZ CRAMPW
DEFINE ADVAN (USE)<;PIECE ADVANCEMENT
IFN USE,<MOVEI U1,[ASCIZ /ADVAN /]>
IFE USE,<JRST ADAVNZ>>
ADAVNZ: MOVE U1,AN
IOR U1,PN
JUMPE X5,.+3
AND U1,[000000377000]
JRST .+2
AND U1,[000377000000]
CAQ X1,X4
POPJ PDP,
DEFINE MIDDLE (USE)<;MIDDLE CONTROL
IFN USE,<MOVEI U1,[ASCIZ /MIDDLE /]>
IFE USE,<JRST MIDDLZ>>
MIDDLZ:MOVE U1,P
AND U1,MIDMSK
CAQ X1,X4
POPJ PDP,
MIDMSK: 000146146000
DEFINE DYKE (USE)<;DYKE TERM
IFN USE,<MOVEI U1,[ASCIZ /DYKE /]>
IFE USE,<JRST DYKEZ>>
DYKEZ: MOVE U1,PN
LSH U1,4
AND U1,PN
LSH U1,4
AND U1,PN
MOVE U2,PN
LSH U2,5
AND U2,PN
LSH U2,5
AND U2,PN
JUMPE X5,.+4
LSH U1,4
LSH U2,5
JRST .+3
LSH U1,-14
LSH U2,-17
IOR U1,U2
SETCM U2,Z
AND U1,U2
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE FOUR (USE) <;FOUR IN A ROW
IFN USE,<MOVEI U1,[ASCIZ /FOUR /]>
IFE USE,<JRST FOURZ>>
FOURZ: MOVE U1,PN
LSH U1,4
AND U1,PN
LSH U1,4
AND U1,PN
LSH U1,4
MOVE U2,PN
LSH U2,-5
AND U2,PN
LSH U2,-5
AND U2,PN
LSH U2,-5
IOR U1,U2
AND U1,PN
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE CRAMP (USE) <;CRAMP TERM
IFN USE,<MOVEI U1,[ASCIZ /CRAMP /]>
IFE USE,<JRST CRAMPZ>>
CRAMPZ: MOVEI X4,2
MOVE X1,PN
SETCM U1,X1
MOVE X2,AN
SETCM U2,X2
SETCM X3,Z
JUMPE X5,CRAMPW
;SINGLE CORNER
TDNN U1,[000312000000] ;9,10,13,15
TDNE U2,[000000214000] ;17,21,22
JRST .+3
TDNN X3,[000004100000] ;14,18
ADDI X4,1
TDNN U1,[000114000000] ;10,13,14 BLACK OCCUPIED
TDNE U2,[000000214200] ;17,21,22,25 WHITE OCCUPIED
SUBI X4,1
TDNN U1,[000011020000] ;12,16,20 BLACK OCCUPIES
TDNE U2,[000000043040] ;19,23,24,27 WHITE
SUBI X4,1
POPJ PDP,
;WHITE PASSIVE SINGLE CORNER
CRAMPW: TDNN U1,[000000123000] ;18,20,23,24
TDNE U2,[000061000000] ;11,12,16
JRST .+3
TDNN X3,[000002040000] ;15,19
ADDI X4,1
TDNN U1,[000000062000] ;19,20,23 WHITE PCCUPIED
TDNE U2,[001061000000] ;8,11,12,16 BLACK OCCUPIED
SUBI X4,1
TDNN U1,[000010210000] ;13,17,21 WHITE OCCUPIES
TDNE U2,[004304000000] ;6,9,10,14 BLACK
SUBI X4,1
POPJ PDP,
;PAIRZ WOOPZ CORNEZ CORNZ1 CORNZ2 CORNM1 CORNM2 CORNM3
DEFINE PAIRS (USE) <;DIAGONAL PAIRS
IFN USE,<MOVEI U1,[ASCIZ /PAIRS /]>
IFE USE,<JRST PAIRZ>>
PAIRZ: MOVE U1,PN
LSH U1,4
AND U1,PN
CAQ X1,U2
MOVE U1,PN
LSH U1,5
AND U1,PN
CAQ X1,X4
ADD X4,U2
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE WOOPS (USE)<;SHOT WEAKNESS
IFN USE,<MOVEI U1,[ASCIZ /WOOPS /]>
IFE USE,<JRST WOOPZ>>
WOOPZ: MOVEI X4,2
SETCM U1,P
AND U1,[017377377377]
LSH U1,11
ANDCM U1,P ;EMPTY FORE AND AFT
MOVE X1,P
AND X1,[003143143140]
LSH X1,1
AND X1,P ;PASSIVE SIDE BY SIDE
LSH X1,4
AND X1,U1
SKIPN X1
SUBI X4,1
SETCM U1,P
AND U1,[000167167000]
LSH U1,1
ANDCM U1,P ;EMPTY SIDE BY SIDE
MOVE X1,P
AND X1,[000007347340]
LSH X1,11
AND X1,P ;PASSIVE FORE AND AFT
LSH U1,4
AND X1,U1
SKIPN X1
SUBI X4,1
POPJ PDP,
DEFINE CORNER (USE)<;DOUBLE CORNER DISTANCE
IFN USE,<MOVEI U1,[ASCIZ /CORNER /]>
IFE USE,<JRST CORNEZ>>
CORNEZ: MOVE X4,P
AND X4,CORNM3
JUMPE X4,CORNZ2
MOVE U1,X4
CAQ X1,X4
MOVE U1,P
AND U1,CORNM2
JUMPE U1,CORNZ1
CAQ X1,X3
ADD X4,X3
MOVE U1,P
AND U1,CORNM1
JUMPE U1,CORNZ1
CAQ X1,X3
ADD X4,X3
CORNZ1: CAILE X4,17
MOVEI X4,17
CORNZ2: POPJ PDP,
CORNM1: 214200001061
CORNM2: 314314063063
CORNM3: 316317363163
;NEARZ NEARMB NEARMW MOMENZ MOMEZZ MOMZZZ MOMEZ1 MOMEZ2 PRESSZ PRESZZ PRESSM
DEFINE NEAR (USE)<;NEARNESS TO BOTH CORNERS
IFN USE,<MOVEI U1,[ASCIZ /NEAR /]>
IFE USE,<JRST NEARZ>>
NEARZ: SETZ X4,
MOVE U2,P
IOR U2,A
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMB(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPE X1 ;IS PASSIVE NEARER
POPJ PDP, ;NO
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMW(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPN X1 ;IS PASSIVE NEARER TO THIS ONE
ADDI X4,1 ;YES
POPJ PDP,
NEARMB: 377377377377
357357357340
356356356000
316316300000
314314000000
214200000000
210000000000
NEARMW: 377377377377
007367367367
000167167167
000003163163
000000063063
000000001061
000000000021
DEFINE MOMENT (USE)<;DOUBLE DIAG MOMENT
IFN USE,<MOVEI U1,[ASCIZ /MOMENT /]>
IFE USE,<JRST MOMENZ>>
MOMENZ: MOVE U1,P
AND U1,MOMEZ2
JUMPE U1,MOMZZZ
CAQ X1,X4
MOVE U1,P
AND U1,MOMEZ1
JUMPE U1,MOMEZZ
CAQ X1,X3
ADD X4,X3
MOMEZZ: CAILE X4,17
MOVEI X4,17
POPJ PDP,
MOMZZZ: AOS (PDP)
AOS (PDP)
POPJ PDP,
MOMEZ1: 214306143061
MOMEZ2: 316357367163
DEFINE PRESS (USE)<;PRESSURE TERM
IFN USE,<MOVEI U1,[ASCIZ /PRESS /]>
IFE USE,<JRST PRESSZ>>
PRESSZ: MOVE U1,PK
JUMPE U1,PRESZZ
LSH U1,11
MOVE U2,PK
LSH U2,-11
IOR U1,U2
MOVE U2,PK
LSH U2,1
AND U2,PRESSM
IOR U1,U2
MOVE U2,PK
AND U2,PRESSM
LSH U2,-1
IOR U1,U2
AND U1,A
JUMPE U1,PRESZZ
CAQ X1,X4
POPJ PDP,
PRESZZ: AOS (PDP)
AOS (PDP)
POPJ PDP,
PRESSM: 167167167167
;ALINEZ AMB AMW NERZ NERZ2 NERZ3 NERZ4 EDGEZ EDGMSK CENTZ
DEFINE ALINE (USE) <;ALINE TERM (S)
IFN USE,<MOVEI U1,[ASCIZ /ALINE /]>
IFE USE,<JRST ALINEZ>>
ALINEZ: MOVE U1,PN
JUMPE X5,.+3
AND U1,AMB
JRST .+2
AND U1,AMW
JUMPE U1,.+16
CAQ X1,X4
POPJ PDP,
JRST .+1
AOS (PDP)
AOS (PDP)
POPJ PDP,
AMB: 246102040020
AMW: 010204102145
NEARSS: 0
DEFINE NEAR2 (USE)<;NEARNESS TO BOTH DOUBLE CORNERS
IFN USE,<MOVEI U1,[ASCIZ /NEAR2 /]>
IFE USE,<JRST NERZ>>
NERZ: SETZM NEARSS
MOVE U2,P
IOR U2,A
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMB(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPN X1 ;IS PASSIVE NEARER ONE D.C.
AOS NEARSS ;YES
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMW(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPN X1 ;IS PASSIVE NEARER TO THIS ONE
AOS NEARSS ;YES
MOVE U1,A
CAQ X1,U2
MOVE U1,P
CAQ X1,X4
CAMN U2,X4
JRST NERZ3 ;PIECES EQUAL
CAMG U2,X4
JRST NERZ4 ;P>A SO SHOULD CONTROL BOTH
NERZ2: SETZ X4,
SKIPE NEARSS
ADDI X4,1 ;CREDIT P IF CAN RUN
POPJ PDP,
NERZ3: MOVE U1,P
IOR U1,A
AND U1,[360360360360]
CAQ X1,U2
TRNE U2,1 ;WHO HAS MOVE
JRST NERZ2 ;A SO P SHOULD RUN
NERZ4: SETZ X4,
SOSLE NEARSS
ADDI X4,1 ;CREDIT P IF CONTROL BOTH
POPJ PDP,
DEFINE EDGE (USE)<;EDGE PIECE COUNT
IFN USE,<MOVEI U1,[ASCIZ /EDGE /]>
IFE USE,<JRST EDGEZ>>
EDGEZ: MOVE U1,PN
AND U1,EDGMSK
JUMPE U1,.+15
CAQ X1,X4
POPJ PDP,
AOS (PDP)
AOS (PDP)
POPJ PDP,
EDGMSK: 350030030027
DEFINE CENT (USE)<;CENTER CONTROL
IFN USE,<MOVEI U1,[ASCIZ /CENT /]>
IFE USE,<JRST CENTZ>>
CENTZ: MOVE U1,P
AND U1,KMASK
CAQ X1,X4
POPJ PDP,
;CROK2Z NER3Z NER3Z2 NER3Z3 NER3Z4 FILEZ FILMSK
DEFINE CROOK2 (USE)<;SIMPLE CROOK
IFN USE,<MOVEI U1,[ASCIZ /CROOK2 /]>
IFE USE,<JRST CROK2Z>>
CROK2Z: MOVE U1,P
LSH U1,11
AND U1,P
MOVE X1,P
LSH X1,1
IOR X1,P
LSH X1,4
AND U1,X1
CAQ X1,X4
POPJ PDP,
DEFINE NEAR3 (USE)<;NEARNESS TO BOTH DOUBLE CORNERS
IFN USE,<MOVEI U1,[ASCIZ /NEAR3 /]>
IFE USE,<JRST NER3Z>>
NER3Z: SETZB X4,NEARSS
MOVE U2,P
IOR U2,A
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMB(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPN X1 ;IS PASSIVE NEARER ONE D.C.
AOS NEARSS ;YES
MOVEI U1,6
MOVE X1,U2
AND X1,NEARMW(U1)
SKIPN X1
SOJA U1,.-3
AND X1,A
SKIPN X1 ;IS PASSIVE NEARER TO THIS ONE
AOS NEARSS ;YES
MOVE U1,A
CAQ X1,U2
MOVE U1,P
CAQ X1,X3
CAMN U2,X3
JRST NER3Z3 ;PIECES EQUAL
CAMG U2,X3
JRST NER3Z4 ;P>A SO SHOULD CONTROL BOTH
NER3Z2: SKIPE NEARSS
ADDI X4,1 ;CREDIT P IF CAN RUN
POPJ PDP,
NER3Z3: MOVE U1,P
IOR U1,A
AND U1,[360360360360]
CAQ X1,U2
TRNE U2,1 ;WHO HAS MOVE
JRST NER3Z2 ;A SO P SHOULD RUN
NER3Z4: ADDI X4,1 ;CREDIT FOR MOVE OR AHEAD
SOSLE NEARSS
ADDI X4,1 ;CREDIT P IF CONTROL BOTH
POPJ PDP,
DEFINE FILE (USE)<;FILE PIECE COUNT
IFN USE,<MOVEI U1,[ASCIZ /FILE /]>
IFE USE,<JRST FILEZ>>
FILEZ: MOVE U1,P
AND U1,FILMSK
JUMPE U1,.+15
CAQ X1,X4
POPJ PDP,
AOS (PDP)
AOS (PDP)
POPJ PDP,
FILMSK: 044044044044
;PINPZ PINPW
DEFINE PINP (USE) <;PINP TERM
IFN USE,<MOVEI U1,[ASCIZ /PINP /]>
IFE USE,<JRST PINPZ>>
PINPZ: MOVEI X4,5
MOVE X1,PN
SETCM U1,X1
MOVE X2,AN
SETCM U2,X2
SETCM X3,Z
JUMPE X5,PINPW
;SINGLE CORNER
TDNN U1,[000312000000] ;9,10,13,15
TDNE U2,[000000214000] ;17,21,22
JRST .+3
TDNN X3,[000004100000] ;14,18
ADDI X4,1
TDNN U1,[000114000000] ;10,13,14 BLACK OCCUPIED
TDNE U2,[000000214200] ;17,21,22,25 WHITE OCCUPIED
SUBI X4,1
TDNN U1,[000011020000] ;12,16,20 BLACK OCCUPIES
TDNE U2,[000000043040] ;19,23,24,27 WHITE
SUBI X4,1
TDNE U1,[000000004000] ;22 BACK ROW PINP
JRST .+3
TDNN U2,[000000000012] ;29,31
TDNE X3,[000000000304] ;25,26,30 EMPTY
SUBI X4,1
TDNE U1,[041000000000] ;3,8 3 BY 2 LEFT
JRST .+3
TDNN U2,[000021020000] ;12,16,20
TDNE X3,[020042000000] ;4,11,15 EMPTY
SUBI X4,1
TDNE U1,[004200000000] ;6,9 3BY2 RIGHT
JRST .+3
TDNN U2,[000010210000] ;13,17,21
TDNE X3,[210004100000] ;1,5,14,18
SUBI X4,1
POPJ PDP,
;WHITE PASSIVE SINGLE CORNER
PINPW: TDNN U1,[000000123000] ;18,20,23,24
TDNE U2,[000061000000] ;11,12,16
JRST .+3
TDNN X3,[000002040000] ;15,19
ADDI X4,1
TDNN U1,[000000062000] ;19,20,23 WHITE PCCUPIED
TDNE U2,[001061000000] ;8,11,12,16 BLACK OCCUPIED
SUBI X4,1
TDNN U1,[000010210000] ;13,17,21 WHITE OCCUPIES
TDNE U2,[004304000000] ;6,9,10,14 BLACK
SUBI X4,1
TDNE U1,[000040000000] ;11 BACK ROW
JRST .+3
TDNN U2,[120000000000] ;2,4
TDNE X3,[043000000000] ;3,7,8
SUBI X4,1
TDNE U1,[000000001040] ;24,27 3BY2 LEFT
JRST .+3
TDNN U2,[000021020000] ;12,16,20
TDNE X3,[000002040021] ;15,19,28,32
SUBI X4,1
TDNE U1,[000000000204] ;25,30 3BY2 RIGHT
JRST .+3
TDNN U2,[000010210000] ;13,17,21
TDNE X3,[000000104010] ;18,22,29
SUBI X4,1
POPJ PDP,
;SHVEDZ SHVERZ SHVESZ
DEFINE SHOVED (USE) <;SHOVED TERM
IFN USE,<MOVEI U1,[ASCIZ /SHOVED /]>
IFE USE,<JRST SHVEDZ>>
SHVEDZ: MOVE U1,FP
LSH U1,-11
MOVE U2,BP
LSH U2,11
IOR U1,U2
MOVE U2,FP
AND U2,[167167167167]
LSH U2,-10
IOR U1,U2
MOVE U2,FP
AND U2,[356356356356]
LSH U2,-12
IOR U1,U2
MOVE U2,BP
AND U2,[167167167167]
LSH U2,10
IOR U1,U2
MOVE U2,BP
AND U2,[356356356356]
LSH U2,12
IOR U1,U2
SKIPN U2,PK
JRST .+6
AND U2,[00146146000]
LSH U2,-1
IOR U1,U2
LSH U2,2
IOR U1,U2
AND U1,A
JUMPE U1,.+15
CAQ X1,X4
POPJ PDP,
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE SHOVER (USE) <; PIECES DOING SHOVING
IFN USE,<MOVEI U1,[ASCIZ /SHOVER /]>
IFE USE,<JRST SHVERZ>>
SHVERZ: MOVE U1,A ;NOW COUNT PASSIVE PIECES
LSH U1,11
MOVE U2,A
AND U2,[167167167167]
LSH U2,10
MOVE U3,A
AND U3,[356356356356]
LSH U3,12
IOR U2,U3
XOR U1,U2
AND U1,FP
MOVE U2,A
LSH U2,-11
MOVE U3,A
AND U3,[167167167167]
LSH U3,-10
MOVE Z,A
AND Z,[356356356356]
LSH Z,-12
IOR U3,Z
XOR U2,U3
AND U2,BP
IOR U1,U2
MOVE U2,A
LSH U2,1
MOVE X4,A
LSH X4,-1
IOR U2,X4
AND U2,PK
AND U2,[000146146000]
IOR U1,U2
JUMPE U1,.+15
CAQ X1,X4
POPJ PDP,
AOS (PDP)
AOS (PDP)
POPJ PDP,
DEFINE SHOVES (USE) <;SHOVES TERM
IFN USE,<MOVEI U1,[ASCIZ /SHOVES /]>
IFE USE,<JRST SHVESZ>>
SHVESZ: PUSHJ PDP,SHVERZ
MOVEM X4,X4SHV#
JRST .+2
SETZM X4SHV
PUSHJ PDP,SHVEDZ
ADD X4,X4SHV
POPJ PDP,
MOVE X4,X4SHV
POPJ PDP,
;PINKZ PINKW PINZ PINW
DEFINE PINK (USE) <;PINK TERM
IFN USE,<MOVEI U1,[ASCIZ /PINK /]>
IFE USE,<JRST PINKZ>>
PINKZ: SKIPN U1,PK
POPJ PDP,
SETCM U2,AN
MOVEI X4,6
JUMPE X5,PINKW
TDNE U1,[000040000000] ;11 LEFT EDGE
TDNE U2,[000020020000] ;12,20
SUBI X4,1
TDNE U1,[000000040000] ;19 LEFT EDGE
TDNE U2,[000000020020] ;20,28
SUBI X4,1
TDNE U1,[000004000000] ;14 RIGHT EDGE
TDNE U2,[000010010000] ;13,21
SUBI X4,1
TDNE U1,[000000004000] ;22 RIGHT EDGE
TDNE U2,[000000010010] ;21,29
SUBI X4,1
TDNE U1,[000000004000] ;22
TDNE U2,[000000010004] ;21,30
SUBI X4,1
TDNE U1,[000040000000] ;11
TDNE U2,[000000020000] ;20
JRST .+3
MOVE U2,AK
TDNN U2,[020000000000] ;4
SUBI X4,1
POPJ PDP,
PINKW: TDNE U1,[000040000000] ;11 LEFT EDGE
TDNE U2,[020020000000] ;4,12
SUBI X4,1
TDNE U1,[000000040000] ;19 LEFT EDGE
TDNE U2,[000020020000] ;12,20
SUBI X4,1
TDNE U1,[000004000000] ;14 RIGHT EDGE
TDNE U2,[010010000000] ;5,13
SUBI X4,1
TDNE U1,[000000004000] ;22 RIGHT EDGE
TDNE U2,[000010010000] ;13,21
SUBI X4,1
TDNE U1,[000040000000] ;11
TDNE U2,[040020000000] ;3,12
SUBI X4,1
TDNE U1,[000000004000] ;22
TDNE U2,[000010000000] ;13
JRST .+3
MOVE U2,AK
TDNN U2,[000000000010] ;29
SUBI X4,1
POPJ PDP,
DEFINE PIN (USE) <;PIN TERM
IFN USE,<MOVEI U1,[ASCIZ /PIN /]>
IFE USE,<JRST PINZ>>
PINZ: MOVEI X4,3
MOVE X1,PN
SETCM U1,X1
MOVE X2,AN
SETCM U2,X2
SETCM X3,Z
JUMPE X5,PINW
;SINGLE CORNER
TDNN U1,[000312000000] ;9,10,13,15
TDNE U2,[000000214000] ;17,21,22
JRST .+3
TDNN X3,[000004100000] ;14,18
ADDI X4,1
TDNE U1,[000000004000] ;22 BACK ROW PIN
JRST .+3
TDNN U2,[000000000012] ;29,31
TDNE X3,[000000000304] ;25,26,30 EMPTY
SUBI X4,1
TDNE U1,[041000000000] ;3,8 3 BY 2 LEFT
JRST .+3
TDNN U2,[000021020000] ;12,16,20
TDNE X3,[020042000000] ;4,11,15 EMPTY
SUBI X4,1
TDNE U1,[004200000000] ;6,9 3BY2 RIGHT
JRST .+3
TDNN U2,[000010210000] ;13,17,21
TDNE X3,[210004100000] ;1,5,14,18
SUBI X4,1
SKIPN U1,PK ;KING PINS
POPJ PDP,
ADDI X4,6
TDNE U1,[000040000000] ;11 LEFT EDGE
TDNE U2,[000020020000] ;12,20
SUBI X4,1
TDNE U1,[000000040000] ;19 LEFT EDGE
TDNE U2,[000000020020] ;20,28
SUBI X4,1
TDNE U1,[000004000000] ;14 RIGHT EDGE
TDNE U2,[000010010000] ;13,21
SUBI X4,1
TDNE U1,[000000004000] ;22 RIGHT EDGE
TDNE U2,[000000010010] ;21,29
SUBI X4,1
TDNE U1,[000000004000] ;22
TDNE U2,[000000010004] ;21,30
SUBI X4,1
TDNE U1,[000040000000] ;11
TDNE U2,[000000020000] ;20
JRST .+3
MOVE U2,AK
TDNN U2,[020000000000] ;4
SUBI X4,1
POPJ PDP,
;WHITE PASSIVE SINGLE CORNER
PINW: TDNN U1,[000000123000] ;18,20,23,24
TDNE U2,[000061000000] ;11,12,16
JRST .+3
TDNN X3,[000002040000] ;15,19
ADDI X4,1
TDNE U1,[000040000000] ;11 BACK ROW
JRST .+3
TDNN U2,[120000000000] ;2,4
TDNE X3,[043000000000] ;3,7,8
SUBI X4,1
TDNE U1,[000000001040] ;24,27 3BY2 LEFT
JRST .+3
TDNN U2,[000021020000] ;12,16,20
TDNE X3,[000002040021] ;15,19,28,32
SUBI X4,1
TDNE U1,[000000000204] ;25,30 3BY2 RIGHT
JRST .+3
TDNN U2,[000010210000] ;13,17,21
TDNE X3,[000000104010] ;18,22,29
SUBI X4,1
SKIPN U1,PK ;KING PINS
POPJ PDP,
ADDI X4,6
TDNE U1,[000040000000] ;11 LEFT EDGE
TDNE U2,[020020000000] ;4,12
SUBI X4,1
TDNE U1,[000000040000] ;19 LEFT EDGE
TDNE U2,[000020020000] ;12,20
SUBI X4,1
TDNE U1,[000004000000] ;14 RIGHT EDGE
TDNE U2,[010010000000] ;5,13
SUBI X4,1
TDNE U1,[000000004000] ;22 RIGHT EDGE
TDNE U2,[000010010000] ;13,21
SUBI X4,1
TDNE U1,[000040000000] ;11
TDNE U2,[040020000000] ;3,12
SUBI X4,1
TDNE U1,[000000004000] ;22
TDNE U2,[000010000000] ;13
JRST .+3
MOVE U2,AK
TDNN U2,[000000000010] ;29
SUBI X4,1
POPJ PDP,
;QUICKZ QUICKP QUICKW KEYSQZ NONUSZ FILESZ FILESM
DEFINE QUICK (USE)<;QUICK KING ATTEMPT
IFN USE,<MOVEI U1,[ASCIZ /QUICK /]>
IFE USE,<JRST QUICKZ>>
QUICKZ: SETZ X4,
MOVE U1,PN
JUMPE X5,QUICKW
AND U1,[000017377377]
JUMPE U1,QUICKP
ADDI X4,1
AND U1,[000000377377]
JUMPE U1,QUICKP
ADDI X4,2
AND U1,[000000017377]
JUMPE U1,QUICKP
ADDI X4,3
AND U1,[000000000377]
JUMPE U1,QUICKP
ADDI X4,4
QUICKP: POPJ PDP,
QUICKW: AND U1,[377377360000]
JUMPE U1,QUICKP
ADDI X4,1
AND U1,[377377000000]
JUMPE U1,QUICKP
ADDI X4,2
AND U1,[377360000000]
JUMPE U1,QUICKP
ADDI X4,3
AND U1,[377000000000]
JUMPE U1,QUICKP
ADDI X4,4
POPJ PDP,
DEFINE KEYSQ (USE)<;KEY SQUARES
IFN USE,<MOVEI U1,[ASCIZ /KEYSQ /]>
IFE USE,<JRST KEYSQZ>>
KEYSQZ: SETZ X4,
MOVE U1,PN
AND U1,[000014060000] ;13,14,19,20
JUMPE U1,.+14
CAQ X1,X4
POPJ PDP,
DEFINE NONUSE (USE) <;NONUSE TERM
IFN USE,<MOVEI U1,[ASCIZ /NONUSE /]>
IFE USE,<JRST NONUSZ>>
NONUSZ: MOVE U1,A
MOVE U2,A
MOVE X4,A
LSH U1,11
LSH U2,-11
IOR X4,U1
IORB X4,U2
MOVE U1,U2
AND U1,[267267267267] ;EXCLUDE RIGHT 2 COLUMNS
AND U2,[356356356356] ;EXCLUDE LEFT 2 COLUMNS
LSH U1,1
LSH U2,-1
IOR X4,U1
IORB X4,U2
MOVE U1,U2
LSH U1,5
LSH U2,-5
IOR X4,U1
IOR X4,U2
SETCA X4
AND X4,PK
SKIPE X4
MOVEI X4,1
POPJ PDP,
DEFINE FILES (USE)<;FILES PIECE COUNT
IFN USE,<MOVEI U1,[ASCIZ /FILES /]>
IFE USE,<JRST FILESZ>>
FILESZ: MOVE U1,P
AND U1,FILESM
CAQ X1,X4
POPJ PDP,
FILESM: 254074074065
;SYN
DEFINE T1 (USE)<
PRESS (USE)>
DEFINE T2 (USE)<
NEAR3 (USE)>
DEFINE T3 (USE)<
PAIRS (USE)>
DEFINE T4 (USE)<
GUARD (USE)>
DEFINE T5 (USE)<
EDGE (USE)>
DEFINE T6 (USE)<
DENY (USE)>
DEFINE T7 (USE)<
PINK (USE)>
DEFINE T8 (USE)<
RECAPT (USE)>
DEFINE T9 (USE)<
DIAG (USE)>
DEFINE T10 (USE)<
NONUSE (USE)>
DEFINE T11 (USE)<
KCENT (USE)>
DEFINE T12 (USE)<
UNDENY (USE)>
DEFINE T13 (USE)<
MOMENT (USE)>
DEFINE T14 (USE)<
DIAK (USE)>
DEFINE T15 (USE)<
DDQUAD (USE)>
DEFINE T16 (USE)<
MOBIL2 (USE)>
DEFINE TT1 (USE)<
PRESS (USE)>
DEFINE TT2 (USE)<
THREAT (USE)>
DEFINE TT3 (USE)<
DENY (USE)>
DEFINE TT4 (USE)<
GUARD (USE)>
DEFINE TT5 (USE)<
FORAFT (USE)>
DEFINE TT6 (USE)<
ALINE (USE)>
DEFINE TT7 (USE)<
FRONT (USE)>
DEFINE TT8 (USE)<
DDQUAD (USE)>
DEFINE TT9 (USE)<
SHOVES (USE)>
DEFINE TT10 (USE)<
NONUSE (USE)>
DEFINE TT11 (USE)<
KCENT (USE)>
DEFINE TT12 (USE)<
RECAPT (USE)>
DEFINE TT13 (USE)<
PINK (USE)>
DEFINE TT14 (USE)<
PAIRS (USE)>
DEFINE TT15 (USE)<
NEAR3 (USE)>
DEFINE TT16 (USE)<
MOBIL2 (USE)>
DEFINE TTT1 (USE)<
PRESS (USE)>
DEFINE TTT2 (USE)<
THREAT (USE)>
DEFINE TTT3 (USE)<
DENY (USE)>
DEFINE TTT4 (USE)<
GUARD (USE)>
DEFINE TTT5 (USE)<
PAIRS (USE)>
DEFINE TTT6 (USE)<
DORIO (USE)>
DEFINE TTT7 (USE)<
CROOK (USE)>
DEFINE TTT8 (USE)<
RECAPT (USE)>
DEFINE TTT9 (USE)<
SHOVES (USE)>
DEFINE TTT10 (USE)<
CRAMP (USE)>
DEFINE TTT11 (USE)<
FRONT (USE)>
DEFINE TTT12 (USE)<
QUICK (USE)>
DEFINE TTT13 (USE)<
MOMENT (USE)>
DEFINE TTT14 (USE)<
DDQUAD (USE)>
DEFINE TTT15 (USE)<
EDGE (USE)>
DEFINE TTT16 (USE)<
MOBIL2 (USE)>
DEFINE TTTT1 (USE)<
FORAFT (USE)>
DEFINE TTTT2 (USE)<
MIDDLE (USE)>
DEFINE TTTT3 (USE)<
THREAT (USE)>
DEFINE TTTT4 (USE)<
GUARD (USE)>
DEFINE TTTT5 (USE)<
DDQUAD (USE)>
DEFINE TTTT6 (USE)<
FORAFT (USE)>
DEFINE TTTT7 (USE)<
ALINE (USE)>
DEFINE TTTT8 (USE)<
QUICK (USE)>
DEFINE TTTT9 (USE)<
SHOVES (USE)>
DEFINE TTTT10 (USE)<
ADVAN (USE)>
DEFINE TTTT11 (USE)<
CENT (USE)>
DEFINE TTTT12 (USE)<
MOMENT (USE)>
DEFINE TTTT13 (USE)<
DORIO (USE)>
DEFINE TTTT14 (USE)<
CRAMP (USE)>
DEFINE TTTT15 (USE)<
EDGE (USE)>
DEFINE TTTT16 (USE)<
MOBIL2 (USE)>
;PHASEV PHASET CFERR1 CFERR3 CFERR2
SUBTTL FINAL SCORE EVALUATION
PAGE
;******************************************************************
; EVA CALCULATES A FINAL SCORE FROM THE MOST RECENT EVALUATION
;TERMS.
; CFLAG SPECIFIES BY BITS WHICH TERMS ARE COMPUTED AN EV.
;CFLAG=0 SPECIFIES PIECE COUNT ONLY.
;
;THE RESULT IS RETURNED IN REGISTER C5.
; IT IS ASSUMED THAT THE MOST RECENT RESULTS FROM EV HAVE BEEN
;LEFT IN REGISTER Q (UNLESS CFLAG = 0), AND THAT A,P,K, AND X5 ARE
;ALSO AS THEY WERE UPON THE LAST EXIT FROM EV.
; ALL REGISTERS EXCEPT X2,X3,X4, AND PDP ARE USED.
;REGISTER X1 IS SAVED AND RESTORED.
;******************************************************************
PHASEV: MOVE Q,P ;COMPUTE PHASE
IOR Q,A
CAQ U5,U1
MOVE U5,PHASET(U1)
MOVEM U5,PHASE
POPJ PDP,
PHASET: REPEAT 12,< 0>
REPEAT 4,< 1>
REPEAT 5,< 2>
REPEAT 10,< 3>
;***************************************************************
; ERROR ROUTINES
;***************************************************************
CFERR1: MOVEI U1,[ASCIZ/ EV OVERFLOW /]
PUSHJ PDP,PRINT
MOVE U1,Z
PUSHJ PDP,OCT2
POPJ PDP,
CFERR3: MOVEI U1,[ASCIZ/ SHIFT /]
PUSHJ PDP,PRINT
MOVE U1,Z
PUSHJ PDP,OCT2
MOVEI U1,[ASCIZ / LOCATION /]
PUSHJ PDP,PRINT
HRRZ U1,PDP
PUSHJ PDP,OCT2
JRST TERPRI ;WARNING MESSAGE FOR STORE HAS BEEN PRINTED
CFERR2: MOVEI U1,[ASCIZ/!/]
PUSHJ PDP,PRINT
MOVEI U2,740
POPJ PDP,
;TLIST
SUBTTL PARTIAL EVALUATION
PAGE
;******************************************************************
; EV CALCULATES AND STORES EVALUATION TERMS.
;IF CFLAG = 0 THEN NOTHING IS DONE
;THE RESULTS ARE STORED IN REGISTER Q.
; REGISTER X5 MUST HAVE THE COLOR OF THE BOARD IN IT
;(BLACK'S MOVE = 0), AND A, P, AND K MUST BE PROPERLY FILLED
;UPON ENTRY. THESE 4 REGISTERS ARE SAVED, AS WELL AS X1,X2,X3,
;X4, AND PDP. ALL REGISTERS ARE USED.
;******************************************************************
TLIST: T1 1 ;PHASE 0
T2 1
T3 1
T4 1
T5 1
T6 1
T7 1
T8 1
T9 1
T10 1
T11 1
T12 1
T13 1
T14 1
T15 1
T16 1
TT1 1 ;PHASE 1
TT2 1
TT3 1
TT4 1
TT5 1
TT6 1
TT7 1
TT8 1
TT9 1
TT10 1
TT11 1
TT12 1
TT13 1
TT14 1
TT15 1
TT16 1
TTT1 1 ;PHASE 2
TTT2 1
TTT3 1
TTT4 1
TTT5 1
TTT6 1
TTT7 1
TTT8 1
TTT9 1
TTT10 1
TTT11 1
TTT12 1
TTT13 1
TTT14 1
TTT15 1
TTT16 1
TTTT1 1 PHASE 3
TTTT2 1
TTTT3 1
TTTT4 1
TTTT5 1
TTTT6 1
TTTT7 1
TTTT8 1
TTTT9 1
TTTT10 1
TTTT11 1
TTTT12 1
TTTT13 1
TTTT14 1
TTTT15 1
TTTT16 1
Z ;LIST TERMINATOR
;EV EVD EVD2 EEB EEB2 TESTLS
EV: SKIPN CFLAG
POPJ PDP,
MOVEM X1,CFZ2 ;SAVE REGISTER
MOVEM X4,CFZ1 ;OTHERWISE, SAVE REGISTERS
MOVEM X3,CFZ3
MOVEM X2,CFZ4
MOVEM PDP,CFZ5
MOVEM U1,FA
MOVEM U2,BA
MOVE X1,A
AND X1,K
MOVEM X1,AK ;ACTIVE KINGS
XOR X1,A
MOVEM X1,AN ;ACTIVE NON-KINGS
MOVE X1,P
AND X1,K
MOVEM X1,PK ;PASSIVE KINGS
MOVE X2,X1
XOR X2,P
MOVEM X2,PN ;PASSIVE NON-KINGS
MOVE X2,P
TRNE X5,1 ;TEST DIRECTION
EXCH X1,X2 ;X1 NOW FP, X2 NOW BP
MOVEM X1,FP
MOVEM X2,BP
EMAC -4,U1,-10,RFB
EMAC -5,U1,-12,LFB
EMAC 4,U2,10,LBB
EMAC 5,U2,12,RBB
EVMAC U3,X2,4,12,-5,-4,RFM,RFD,RFU,5,RFT,RFB,RFR,LFB
EVMAC U4,X2,5,10,-4,-5,LFM,LFD,LFU,4,LFT,LFB,LFR,RFB
EVMAC U5,X1,-4,-12,5,4,LBM,LBD,LBU,-5,LBT,LBB,LBR,RBB
EVMAC Q,X1,-5,-10,4,5,RBM,RBD,RBU,-4,RBT,RBB,RBR,LBB
MOVE U5,CFLAG
MOVE PDP,CFZ5
MOVE U1,PHASE
MOVE Z,TESTLS(U1)
HRRM Z,EVD
HRRM Z,EVD2
SETZ Q,
MOVEI U4,17 ;16 TERMS TOTAL
TRNN U5,@TESTM(U4)
JRST .+4 ;BYPASS THIS TERM
EVD: PUSHJ PDP,TESTS(U4)
LSH X4,@TESTSH(U4)
IOR Q,X4
SUBI U4,1
CAILE U4,7 ;IS IT TIME FOR SECOND HALF
JRST .-7 ;NO
MOVE X3,CFZ3
MOVEM Q,EEB(X3)
SETZ Q,
TRNN U5,@TESTM(U4)
JRST .+4 ;BYPASS THIS TERM
EVD2: PUSHJ PDP,TESTS(U4)
LSH X4,@TESTSH(U4)
IOR Q,X4
SOJGE U4,.-5
MOVE X3,CFZ3
MOVEM Q,EEB2(X3)
MOVE X4,CFZ1 ;RESTORE REGISTERS
MOVE X2,CFZ4
MOVE X1,CFZ2
POPJ PDP, ;RETURN
Z
Z
EEB: BLOCK 20
Z
Z
EEB2: BLOCK 20
TESTLS: TESTS ;GET TESTS FOR CORRECT PHASE
TESTS+20
TESTS+40
TESTS+60
;TESTM TESTSH TESTS
TESTM: 400000
200000
100000
40000
20000
10000
4000
2000
1000
400
200
100
40
20
10
4
TESTSH: 40
34
30
24
20
14
10
4
40
34
30
24
20
14
10
4
TESTS: T1 0
T2 0
T3 0
T4 0
T5 0
T6 0
T7 0
T8 0
T9 0
T10 0
T11 0
T12 0
T13 0
T14 0
T15 0
T16 0
TT1 0
TT2 0
TT3 0
TT4 0
TT5 0
TT6 0
TT7 0
TT8 0
TT9 0
TT10 0
TT11 0
TT12 0
TT13 0
TT14 0
TT15 0
TT16 0
TTT1 0
TTT2 0
TTT3 0
TTT4 0
TTT5 0
TTT6 0
TTT7 0
TTT8 0
TTT9 0
TTT10 0
TTT11 0
TTT12 0
TTT13 0
TTT14 0
TTT15 0
TTT16 0
TTTT1 0
TTTT2 0
TTTT3 0
TTTT4 0
TTTT5 0
TTTT6 0
TTTT7 0
TTTT8 0
TTTT9 0
TTTT10 0
TTTT11 0
TTTT12 0
TTTT13 0
TTTT14 0
TTTT15 0
TTTT16 0
;CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY CFTAB2 CFTAB3 CFLAG DENYC THRTC UMB CFMSK CFMSK2 PHASE KSTART MSK2 OFFEDG DDIM CMSK DMSK WGRD1 WGRD2 BGRD1 BGRD2 RMASK SHOVM VULW1 VULW2 VULW3 VULW4 VULB1 VULB2 VULB3 VULB4 MSK1 MSK3 MSK4
CFZ1: Z ;TEMPORARY STORAGE
CFZ2: Z
CFZ3: Z
CFZ4: Z
CFZ5: Z
CFZ10: Z ;BACKUP LOCATION FOR PASK
CFZ11: Z ;BACKUP LOCATION FOR ACTK
CEMPTY: Z ;TEMPORARY LOCATION FOR EMPTY, ET.AL.
CFTAB2: BLOCK 400 ;TABLE 2 FOR EVALUATION
CFTAB3: BLOCK 1000 ;TABLE 3 FOR EVALUATION
CFLAG: 777777 ;SET BY PROGRAM
DENYC: Z ;SPECIAL VALUES USED IN EVALUATION TERMS
THRTC: Z
UMB: Z
CFMSK: 202020202020 ;OF SIGT21 AND SIGTF
CFMSK2: 207777777777 ;MASK
PHASE: Z
KSTART: Z ;INITIAL KINGS
MSK2: 360000000017 ;SPECIAL BOARD MASKS
OFFEDG: 357377377367
DDIM: 004306143040
CMSK: 377372
DMSK: 137377000000
WGRD1: 5
WGRD2: 106
BGRD1: 240000000000
BGRD2: 142000000000
RMASK: 367367367367
SHOVM: 357357357357
VULW1: 000340000000
VULW2: 000200000000
VULW3: 16
VULW4: 3
VULB1: 7000
VULB2: 1000
VULB3: 160000000000
VULB4: 300000000000
MSK1: 030030030030
MSK3: 040000000004
MSK4: 200000000001
END